<?php

class CamposTabla
{
  /*
   * Retorna una lista con los campos de una tabla junto a un chekbox para su seleccion.
   * Si el campo es primary key no lo muestra.
   * Si el campo es foreign key hace un llamdo recursivo.
   */
  protected static 
    $schema = null;
    //$contador = array();
  public static function obtenerCamposTabla($tabla,$tablaReferencia="",$campoReferencia="",$alias="")
  {
    if(self::$schema == null)
      self::$schema = sfYAML::load(sfConfig::get('sf_config_dir').'/schema.yml');
    //$resultado = "<ul><li class='subtitulo'>";
    $resultado = "<fieldset><legend class='negrilla'>";
    if($tablaReferencia!="" && sfConfig::get('app_campo_'.$tablaReferencia))
      $resultado .= sfConfig::get('app_campo_'.$tablaReferencia);
    else
      $resultado .= sfConfig::get('app_tabla_'.$tabla);
    $resultado .= "</legend><ul>";
    //if($tablaReferencia!="")
    //  $tabla=$tablaReferencia."_".$tabla;
    foreach(self::$schema['propel'][$tabla] as $campo=>$atributos)
    {
      if($campo!="_attributes")
      {
        if(isset($atributos['primaryKey']) && $tablaReferencia!="")
          $resultado.="<li style='list-style:none;'>".checkbox_tag('select[]',$tablaReferencia.'_'.$tabla.'.'.$campo).'&nbsp;'.$campo."</li>";
        else
        {
          if(!isset($atributos['foreignTable']) && $tablaReferencia=="")
            $resultado.="<li style='list-style:none;'>".checkbox_tag('select[]',$tabla.'.'.$campo).'&nbsp;'.$campo."</li>";
          else
          {
            if(!isset($atributos['foreignTable']) && $tablaReferencia!="")
              $resultado.="<li style='list-style:none;'>".checkbox_tag('select[]',$tablaReferencia.'_'.$tabla.'.'.$campo).'&nbsp;'.$campo."</li>";
            else
            {
              if(isset($atributos['foreignTable']))
              {
                if($alias!="")
                  $resultado.=input_hidden_tag('join[]',$atributos['foreignTable'].' as '.$tabla.'_'.$atributos['foreignTable'].' on ('.$tabla.'.'.$campo.'='.$tabla.'_'.$atributos['foreignTable'].'.'.$atributos['foreignReference'].')');
                else
                  
                //$resultado.=input_hidden_tag("from[".$atributos['foreignTable']."]",$atributos['foreignTable']);
                //$resultado.=input_hidden_tag('where[]',$tabla.'.'.$campo.'='.$atributos['foreignTable'].'.'.$atributos['foreignReference']);
                if($alias!="")
                  $resultado.=CamposTabla::obtenerCamposTabla($atributos['foreignTable'],$tabla,$campo,$tabla.'_'.$atributos['foreignTable']);
                else
                  $resultado.=CamposTabla::obtenerCamposTabla($atributos['foreignTable'],$tabla,$campo);
              }
                
            }
          }
        }
      }
    }      
    $resultado.="</ul></fieldset>";
    return $resultado;
  }
  public static function describe($table,$alias="",$parentTable="",$parentColumn="")
  {
    if($alias=="")
      $alias=$table;
    $contador = array();
    if(self::$schema == null)
      self::$schema = sfYAML::load(sfConfig::get('sf_config_dir').'/schema.yml');
    $resultado = "<fieldset><legend class='negrilla'>";
    if($parentTable!="" && sfConfig::get('app_campo_'.$parentTable.'.'.$parentColumn))
      $resultado .= sfConfig::get('app_campo_'.$parentTable.'.'.$parentColumn);
    else
      $resultado .= sfConfig::get('app_tabla_'.$table);
    $resultado .= "</legend><ul>";
    foreach(self::$schema['propel'][$table] as $campo=>$atributos)
    {
      if($campo!="_attributes")
      {
        if(isset($atributos['primaryKey']))
        {
          $resultado.="<li style='list-style:none;'>".checkbox_tag('select[]',$alias.'.'.$campo).'&nbsp;'.$campo."</li>";
        }
        elseif(!isset($atributos['foreignTable']))
        {
          $resultado.="<li style='list-style:none;'>".checkbox_tag('select[]',$alias.'.'.$campo).'&nbsp;'.$campo."</li>";
        }
        elseif(isset($atributos['foreignTable']))
        {
          if(!isset($contador[$alias.$atributos['foreignTable']]))
            $contador[$alias.$atributos['foreignTable']] = 1;
          else
            $contador[$alias.$atributos['foreignTable']] += 1; 
          $resultado.=input_hidden_tag('join[]',$atributos['foreignTable'].' as '.$alias.$atributos['foreignTable'].$contador[$alias.$atributos['foreignTable']].' on ('.$alias.'.'.$campo.'='.$alias.$atributos['foreignTable'].$contador[$alias.$atributos['foreignTable']].'.'.$atributos['foreignReference'].')');
          $resultado.=CamposTabla::describe($atributos['foreignTable'],$alias.$atributos['foreignTable'].$contador[$alias.$atributos['foreignTable']],$table,$campo);
        }
      }
    }
    $resultado.="</ul></fieldset>";
    return $resultado;
  }

}
?>
